﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Kopytko.BoardGame
{
    public abstract class Figura
    {
        protected Color Kolor;
        protected List<Ruch> ListaDostepnychRuchow;
        protected List<Ruch> ListaLegalnychRuchow;
        public char Symbol;
        protected bool WykonanyRuch;
        protected Pole Pozycja;

        public Figura(Color kolor, Pole pozycja)
        {
            Kolor = kolor;
            WykonanyRuch = false;
            Pozycja = pozycja;
        }
        public Figura()
        {
        }
        public Color GetKolor()
        {
            return Kolor;
        }
        public Pole GetPozycja()
        {
            return Pozycja;
        }
        public void SetPozycja(Pole nowapozaycja)
        {
            this.Pozycja = nowapozaycja;
        }
        public List<Ruch> PobierzLegalneRuchy(Plansza plansza)
        {
            if (ListaLegalnychRuchow == null)
            {
                ListaLegalnychRuchow = new List<Ruch>();
                List<Ruch> DostepneRuchy = PobierzDostepneRuchy(plansza);
                foreach (Ruch AktualnyRuch in DostepneRuchy)
                {
                    if (AktualnyRuch.JestLegalny(plansza))
                    {
                        ListaLegalnychRuchow.Add(AktualnyRuch);
                    }
                }
            }
            return ListaLegalnychRuchow;
        }
        public abstract List<Ruch> PobierzDostepneRuchy(Plansza plansza);
        public abstract bool JestPuste();
        public abstract bool JestPionkiem();
        public abstract bool JestLaufrem();
        public abstract bool JestKoniem();
        public abstract bool JestWieza();
        public abstract bool JestKrolowa();
        public abstract bool JestKrolem();
        public bool FiguraWykonalaRuch()
        {
            return WykonanyRuch;
        }
        public void ZaznaczWykonanieRuchu()
        {
            WykonanyRuch = true;
        }
    }
}
